package cn.tedu._04mybatis.mapper;

import cn.tedu._04mybatis.pojo.entity.Weibo;
import cn.tedu._04mybatis.pojo.vo.ResultMapVo1;
import cn.tedu._04mybatis.pojo.vo.ResultMapVo2;
import cn.tedu._04mybatis.pojo.vo.WeiboVo1;
import cn.tedu._04mybatis.pojo.vo.WeiboVo2;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiboMapper {
    /**
     * 1.微博表中插入1条表记录
     *
     * @param weibo 微博实体类对象
     * @return 受影响的数据条数
     */
    //@Insert("INSERT INTO weibo(id,content,created,user_id) VALUES (#{id},#{content},#{created},#{userId})")
    int insertWeibo(Weibo weibo);

    /**
     * 2.根据微博ID删除指定的微博
     */
    //@Delete("DELETE FROM weibo WHERE id=#{id}")
    int deleteWeiboById(Long id);

    /**
     * 3.根据微博ID更新指定微博的信息
     * id  content  created  user_id
     */

    //@Update("UPDATE weibo SET content=#{content},created=#{created},user_id=#{userId} WHERE id=#{id}")
    int updateWeiboById(Weibo weibo);

    /**
     * 4.查询：单条数据全字段查询
     * 根据微博ID查询该条微博的所有信息
     * SELECT id,content,created,user_id FROM weibo WHERE id=200;
     * SELECT * FROM weibo WHERE id>200;
     * SELECT content,created FROM weibo WHERE id=200;
     * SELECT content,created FROM weibo WHERE id>200;
     */
    //注意：如果查询字段名和属性名不一致，则通过别名的方式解决.
    //@Select("SELECT id,content,created,user_id userId FROM weibo WHERE id=#{id}")
    Weibo selectWeiboById(Long id);

    /**
     * 5.查询:单条数据部分字段查询
     * 查询指定微博的内容content和发布时间created
     */
    //@Select("SELECT content,created FROM weibo WHERE id=#{id}")
    WeiboVo1 selectWeiboVo1(Long id);

    /**
     * 6.查询:多条数据部分字段查询
     *
     * @param userId
     * @return
     */
    //@Select("SELECT id wid,content FROM weibo WHERE user_id=#{userId}")
    List<WeiboVo2> selectWeiboVo2(Long userId);

    /**
     * 7.动态删除，数组删除
     */
    int deleteWeibo1(Integer[] id);

    /**
     * 8.动态删除2，集合删除
     * @param id
     * @return
     */
    int deleteWeibo2(List<Integer> id);
    /**
     * 9.动态修改
     */
    int updateWeibo1(Weibo weibo);

    /**
     * 10.统计weibo表中记录数量
     *
     */
    int selectCount();
    /**
     * 11.ResultMap单表查询
     */
    ResultMapVo1  selectResultMapVo1(Long id);

    /**
     * 查询指定的用户发布的所有的 **微博信息** ，要求将 **微博信息** 放到一个集合中
     * 要求显示：用户的id、用户昵称、`List<Weibo>集合`
     * resultMap多表示例
     */

    ResultMapVo2 selectResultMapVo2(Long userId);


}
